package com.xdap.init.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileWriter;
import java.util.Properties;

@Slf4j
@Component
public class CreateJavaFIleUtils {

    //设置velocity资源加载器
    public static Properties prop = new Properties();

    static {

        //  Properties prop = new Properties();
        prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");

    }

    /**
     * @auth lishushu
     * @2023/6/15 11:05
     * @desc {创建文件生成的路径，生成文件最后的名称}
     **/
    private static String getFileName(String filePath, String fileName) {

        // 先创建文件路径
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        // 再处理文件名称
        String allName = filePath + "\\" + fileName;
        if (!allName.endsWith(".java")) {
            allName = allName + ".java";
        }
        return allName;
    }


    /**
     * @auth lishushu
     * @2023/4/21 13:40
     * @desc {如果没有就创建,如果目录下已经有这个文件的话，则直接退出处理}
     **/
    public static String createJavaIfNot(String filePath, String fileName, String vmName, VelocityContext context) {
        Velocity.init(prop);
        String allName = getFileName(filePath, fileName);
        try {
            File file = new File(allName);
            if (file.exists()) {
                return allName + "本地已经存在此文件";
            }
            //加载模板
            Template tpl = Velocity.getTemplate(vmName, "UTF-8");
            FileWriter fw = new FileWriter(allName);
            //合并数据到模板
            tpl.merge(context, fw);
            //释放资源
            fw.close();
        } catch (Exception e) {
            // 查看失败的情况下，会直接到下面的文件进行处理
            log.info("创建" + allName + "失败", e);
            return "创建" + allName + "失败";

        }
        return "创建" + allName + "成功";
    }

    /**
     * @auth lishushu
     * @2023/5/25 10:30
     * @desc {直接创建本文件}
     **/
    public static String createJava(String filePath, String fileName, String vmName, VelocityContext context) {
        Velocity.init(prop);

        String allName = getFileName(filePath, fileName);

        try {
            //加载模板
            Template tpl = Velocity.getTemplate(vmName, "UTF-8");
            FileWriter fw = new FileWriter(allName);
            //合并数据到模板
            tpl.merge(context, fw);
            //释放资源
            fw.close();
        } catch (Exception e) {
            // 查看失败的情况下，会直接到下面的文件进行处理
            log.info("创建" + allName + "失败", e);
            return "创建" + allName + "失败";
        }
        return "创建" + allName + "成功";
    }
}
